#ifndef __SCHEDULE_H__
#define __SCHEDULE_H__

#include <types.h>
#include <context.h>
#include <queue.h>

#include <sys/event.h>
#include <sys/thread.h>
#include <sys/unistd.h>

#define SCHED_RR	0x00
#define SCHED_FF	0x01

#define QUANTUM		0x10

/* std prio */
#define PRIO_IDLE	0x10

#define sched_sleep(evt)	sched_thsleep((evt), 0)

context_t *schedule(void);
void sched_lock(void);
void sched_unlock(void);
void sched_init(void);
void sched_tick(void);
void sched_stop(thread_t *);
void sched_start(thread_t *, int, int);
void sched_resume(thread_t *);
void sched_suspend(thread_t *);
void sched_yield(void);
void sched_wakeup(event_t *);
int sched_thsleep(event_t *, uint32_t);
void sched_unsleep(thread_t *, int);
thread_t *sched_wakeupone(event_t *);
 
#endif  /* __SCHEDULE_H__ */
